name: Build job

on:
  # Every Saturday at 21:00 UTC
  schedule:
    - cron: '0 21 * * 6'
  # Manual triggers
  workflow_dispatch:
    inputs:
      git-ref:
        description: Git Ref (Optional)
        required: false
      dry-run:
        description: Creates a draft release
        required: false

jobs:
  build-app:
    runs-on: ubuntu-latest
    steps:
      - name: Clone Repository (Latest)
        uses: actions/checkout@v4
        with:
          repository: 'tachiyomiorg/tachiyomi'
          fetch-depth: 0
        if: github.event.inputs.git-ref == ''
      - name: Clone Repository (Custom Ref)
        uses: actions/checkout@v4
        if: github.event.inputs.git-ref != ''
        with:
          repository: 'tachiyomiorg/tachiyomi'
          fetch-depth: 0
          ref: ${{ github.event.inputs.git-ref }}

      - name: Set up JDK
        uses: actions/setup-java@v4
        with:
          java-version: 17
          distribution: adopt

      - name: Setup Android SDK
        run: |
          ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "build-tools;29.0.3"

      - name: Get previous release
        id: last_release
        uses: InsonusK/get-latest-release@v1.1.0
        with:
          myToken: ${{ github.token }}
          exclude_types: "draft|prerelease"
          view_top: 1

      - name: Prepare build
        run: |
          set -e

          commit_count=$(git rev-list --count HEAD)
          echo "COMMIT_COUNT=$commit_count" >> $GITHUB_ENV
          current_sha=$(git rev-parse --short HEAD)
          echo "CURRENT_SHA=$current_sha" >> $GITHUB_ENV

          prev_commit_count=$(echo "${{ steps.last_release.outputs.tag_name }}" | sed -e "s/^r//")
          commit_count_diff=$(expr $commit_count - $prev_commit_count)
          prev_release_sha=$(git rev-parse --short HEAD~$commit_count_diff)
          echo "PREV_RELEASE_SHA=$prev_release_sha" >> $GITHUB_ENV

          echo "COMMIT_LOGS<<{delimiter}
          $(curl -H "Accept: application/vnd.github.v3+json" \
            "https://api.github.com/repos/tachiyomiorg/tachiyomi/compare/$prev_release_sha...$current_sha" \
            | jq '[.commits[]|{message:(.commit.message | split("\n")), username:.author.login}]' \
            | jq -r '.[]|"- \(.message | first) (@\(.username))"')
          {delimiter}" >> $GITHUB_ENV

      - name: Build APK
        uses: gradle/gradle-command-action@v2
        with:
          arguments: assembleStandardPreview

      - name: Sign APK
        uses: r0adkll/sign-android-release@v1
        with:
          releaseDirectory: app/build/outputs/apk/standard/preview
          signingKeyBase64: ${{ secrets.DEBUG_KEYSTORE }}
          alias: androiddebugkey
          keyStorePassword: android

      - name: Clean up build artifacts
        run: |
          set -e

          cp app/build/outputs/apk/standard/preview/app-standard-universal-preview-signed.apk tachiyomi-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum tachiyomi-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/standard/preview/app-standard-arm64-v8a-preview-signed.apk tachiyomi-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum tachiyomi-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_ARM64_V8A_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/standard/preview/app-standard-armeabi-v7a-preview-signed.apk tachiyomi-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum tachiyomi-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_ARMEABI_V7A_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/standard/preview/app-standard-x86-preview-signed.apk tachiyomi-x86-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum tachiyomi-x86-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_X86_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/standard/preview/app-standard-x86_64-preview-signed.apk tachiyomi-x86_64-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum tachiyomi-x86_64-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV

      - name: Create release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: r${{ env.COMMIT_COUNT }}
          name: Tachiyomi Preview r${{ env.COMMIT_COUNT }}
          body: |
            ### Commits

            https://github.com/tachiyomiorg/tachiyomi/compare/${{ env.PREV_RELEASE_SHA }}...${{ env.CURRENT_SHA }}

            ${{ env.COMMIT_LOGS }}

            ---

            ### Checksums

            | Variant | SHA-256 |
            | ------- | ------- |
            | Universal | ${{ env.APK_UNIVERSAL_SHA }}
            | arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }}
            | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }}
            | x86 | ${{ env.APK_X86_SHA }} |
            | x86_64 | ${{ env.APK_X86_64_SHA }} |
          files: |
            tachiyomi-r${{ env.COMMIT_COUNT }}.apk
            tachiyomi-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk
            tachiyomi-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk
            tachiyomi-x86-r${{ env.COMMIT_COUNT }}.apk
            tachiyomi-x86_64-r${{ env.COMMIT_COUNT }}.apk
          draft: ${{ github.event.inputs.dry-run != '' }}
          prerelease: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Prune old releases
        uses: dev-drprasad/delete-older-releases@v0.3.2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          keep_latest: 28
          delete_tags: true

  update-website:
    needs: [build-app]
    runs-on: ubuntu-latest
    steps:
      - name: Trigger Netlify build hook
        run: curl -s -X POST -d {} "https://api.netlify.com/build_hooks/${TOKEN}"
        env:
          TOKEN: ${{ secrets.NETLIFY_HOOK_RELEASE }}
